package com.mounting.wechat.common.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * @author : lianghanmao
 * @date : 2022/10/21
 */
public class JsonUtil {
    /**
     * 合并json对象
     *
     * @param masterJson:主json
     * @param branchJson：分支json
     * @return
     */
    public static JSONObject mergeJson(JSONObject masterJson, JSONObject branchJson) {
        // 遍历分支json的所有key
        for (String branchKey : branchJson.keySet()) {
            Object masterValue = masterJson.get(branchKey);
            Object branchValue = branchJson.get(branchKey);
            // 主对象不存在，分支对象存在直接加入
            if (masterValue == null && branchValue!=null) {
                masterJson.put(branchKey, branchValue);
                // 如果分支对象为json列表且主对象也为json列表
            } else if (masterValue instanceof JSONArray && branchValue instanceof JSONArray) {
                // 如果分支对象为空，直接跳过
                if (((JSONArray) branchValue).isEmpty()) {
                    continue;
                }
                // 如果主对象为空，且分支对象不为空，将分支对象的所有值添加到主分支
                if (((JSONArray) masterValue).isEmpty()) {
                    ((JSONArray) masterValue).addAll(((JSONArray) branchValue).toJavaList(Object.class));
                } else {
                    // 如果不为空
                    for (Object obj : ((JSONArray) branchValue)) {
                        // 当前对象不存在与主分支
                        if (!((JSONArray) masterValue).contains(obj)) {
                            ((JSONArray) masterValue).add(obj);
                        }
                    }
                }
                // 如果分支对象为json对象且主对象也为json对象
            } else if (masterValue instanceof JSONObject && branchValue instanceof JSONObject) {
                mergeJson((JSONObject) masterValue, (JSONObject) branchValue);
            }
        }
        return masterJson;
    }

}
